home *** CD-ROM | disk | FTP | other *** search
- procedure Drawline (x1, y1, x2, y2: integer; colour: byte);
- assembler;
- var difx, dify: integer;
- d, inc1, inc2, inc3: integer;
- asm
- mov dx,03c4h
- mov al,02h
- out dx,al
-
- @absolute_xdif:
- mov ax,x1
- sub ax,x2
- cmp ax,0
- jge @save_xdif
- xor ax,0ffffh
- inc ax
- @save_xdif:
- mov difx,ax
-
- @absolute_ydif:
- mov ax,y1
- sub ax,y2
- cmp ax,0
- jge @save_ydif
- xor ax,0ffffh
- inc ax
- @save_ydif:
- mov dify,ax
-
- @find_independant:
- cld
- mov ax,PageSeg
- mov es,ax
- mov ax,difx
- cmp ax,dify
- jl @yindependant
-
- @xindependant:
- cmp difx,0
- jz @line_done
- mov ax,dify
- shl ax,1
- mov inc1,ax
- mov ax,dify
- sub ax,difx
- shl ax,1
- mov inc2,ax
- mov ax,inc1
- sub ax,difx
- mov d,ax
-
- mov ax,x2
- cmp ax,x1
- jg @noswapx
- mov ax,x1
- mov bx,x2
- mov x1,bx
- mov x2,ax
- mov ax,y1
- mov bx,y2
- mov y1,bx
- mov y2,ax
- @noswapx:
- mov inc3,80
- mov ax,y2
- cmp ax,y1
- jg @xadd
- mov inc3,-80
- @xadd:
- mov ax,80
- mul y1
- mov bx,ax
- mov ax,x1
- shr ax,1
- shr ax,1
- add ax,bx
- mov di,ax
- mov ax,x1
- and al,3
- xchg ah,al
- mov cl,ah
- mov al,1
- shl al,cl
- mov dx,03c5h
- out dx,al
-
- mov al,colour
- mov bx,d
-
- mov cx,difx
- @loopx:
- stosb
- dec di
- inc ah
- cmp ah,4
- jnz @xnoinc_di
- xor ah,ah
- inc di
-
- @xnoinc_di:
- push cx
- mov ch,al
- mov cl,ah
- mov al,1
- shl al,cl
- out dx,al
- mov al,ch
- pop cx
-
- cmp bx,0
- jl @loopx_noinc
- add bx,inc2
- add di,inc3
- loop @loopx
- jmp @line_done
- @loopx_noinc:
- add bx,inc1
- loop @loopx
- jmp @line_done
-
- @yindependant:
- cmp dify,0
- jz @line_done
- mov ax,difx
- shl ax,1
- mov inc1,ax
- mov ax,difx
- sub ax,dify
- shl ax,1
- mov inc2,ax
- mov ax,inc1
- sub ax,dify
- mov d,ax
-
- mov ax,y2
- cmp ax,y1
- jg @noswapy
- mov ax,x1
- mov bx,x2
- mov x1,bx
- mov x2,ax
- mov ax,y1
- mov bx,y2
- mov y1,bx
- mov y2,ax
- @noswapy:
- mov inc3,1
- mov ax,x2
- cmp ax,x1
- jg @yadd
- mov inc3,-1
- @yadd:
- mov ax,80
- mul y1
- mov bx,ax
- mov ax,x1
- shr ax,1
- shr ax,1
- add ax,bx
- mov di,ax
- mov ax,x1
- and al,3
- xchg ah,al
- mov cl,ah
- mov al,1
- shl al,cl
- mov dx,03c5h
- out dx,al
-
- mov al,colour
- mov bx,d
-
- mov cx,dify
- inc cx
- @loopy:
- stosb
- add di,79
-
- cmp bx,0
- jl @loopy_noinc
- add bx,inc2
- cmp inc3,1
- jz @inc3_pos
- dec ah
- cmp ah,255
- jnz @ynoinc_di
- add di,inc3
- and ah,3
- jmp @ynoinc_di
-
- @inc3_pos:
- inc ah
- cmp ah,4
- jnz @ynoinc_di
- add di,inc3
- and ah,3
- @ynoinc_di:
- push cx
- mov ch,al
- mov cl,ah
- mov al,1
- shl al,cl
- out dx,al
- mov al,ch
- pop cx
-
- loop @loopy
- jmp @line_done
- @loopy_noinc:
- add bx,inc1
- loop @loopy
- jmp @line_done
-
- @line_done:
- end;
-
-
-